import strRemove from '../../data/strRemove';

/** 【同步方法】将任意颜色值转换为RGB颜色值
 * @param color 颜色值字符串
 * @param alpha 透明度，数值范围：0~1
 * @return RGB颜色值，如：'rgba(0,0,0,1)'
 */
function colorRGB(color = '', alpha = 1) {
    
    // 初始化返回数据
    let data_return = '';
    
    // 移除字符串中的“空格”
    let str_color = strRemove(color, ' ');
    // 如果数据有效，才执行
    if (str_color)
    {
        // 如果传入的字符串是rgb格式
        if (/^(rgb|RGB)/.test(str_color))
        {
            // 分离出三原色对应数值
            let arr_color = str_color.match(/\((\S*)\)/)[1].split(",");
            // 透明度转化为数字类型
            let num_Alpha = Number(alpha);
            // 如果加了透明度
            if (num_Alpha < 1 && num_Alpha >= 0)
            {
                // 最终返回值赋值
                data_return = `rgba(${arr_color[0]},${arr_color[1]},${arr_color[2]},${num_Alpha})`;
            }
            // 否则直去掉A透明度表示
            else {
                // 最终返回值赋值
                data_return = `rgb(${arr_color[0]},${arr_color[1]},${arr_color[2]})`;
            }
        }
        // 如果传入的字符串是16进制颜色值
        else if (/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(str_color))
        {
            // 分隔字符串为数组
            let arr_char = str_color.replace(/#/,"").split("");
            // 临时数据变量：分装R、G、B三原色16进制数值的数组
            let arr_color = [];
            // 如果是6位长度，那么用 12 34 56 位数据组合数值
            if (arr_char.length == 6)
            {
                arr_color[0] = arr_char[0].toString() + arr_char[1].toString();
                arr_color[1] = arr_char[2].toString() + arr_char[3].toString();
                arr_color[2] = arr_char[4].toString() + arr_char[5].toString();
            }
            // 如果是3位长度，那么使用 11 22 33 位数据组合数值
            else if (arr_char.length == 3)
            {
                arr_color[0] = arr_char[0].toString() + arr_char[0].toString();
                arr_color[1] = arr_char[1].toString() + arr_char[1].toString();
                arr_color[2] = arr_char[2].toString() + arr_char[2].toString();
            }
            
            // 十进制RGB颜色值数组
            let arr_RGB = [];
            // 循环临时数据变量
            for (let i = 0; i < arr_color.length; i++)
            {
                // 将16进制数值转换为10进制
                arr_RGB.push(parseInt("0x"+arr_color[i]));    
            }
            
            // 透明度转化为数字类型
            let num_Alpha = Number(alpha);
            // 如果加了透明度
            if (num_Alpha < 1 && num_Alpha >= 0)
            {
                // 最终返回值赋值
                data_return = `rgba(${arr_RGB.join(",")},${num_Alpha})`;
            }
            // 否则直去掉A透明度表示
            else {
                // 最终返回值赋值
                data_return = `rgb(${arr_RGB.join(",")})`;
            }
        }
    }
    
    // 返回结果数据
    return data_return;
}

export default colorRGB;